package springbook.user.dao;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springbook.user.user.dao.UserDao;

/*애플리케이션 컨텍스트 또는 빈팩토리가 사용할 설정정보라는 표시*/
@Configuration
public class CountionDaoFactory {
	/*오브젝트 생성을 담당하는 IoC용 메소드라는 표시*/ 
	@Bean
	public UserDao userDao(){
		UserDao userDao = new UserDao();
		userDao.setConnectionMaker(conntionMaker());
		/*팩토리의 메소드는 UserDao 타입의 오브젝트를 어떻게 만들고, 어떻게 준비시킬지 결정한다.*/
		
		return userDao;
	}
	@Bean
	public ConnectionMaker conntionMaker(){
		return new CountingConnectionMaker(realConntionMaker());
	}
	
	/*생성을 담당하는 IoC용 메소드라는 표시*/
	@Bean
	public ConnectionMaker realConntionMaker(){
		return new DConnectionMaker(); //분리해서 중복을 제거한  ConnectionMaker 타입 오브젝트 생성코드
	}
}
